home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / spiele / puzzle97 / neue_fkt.txt < prev    next >
Text File  |  1993-05-02  |  15KB  |  360 lines

  1.                         Neue Funktionen in NVDI 2.50
  2.                         ============================
  3.  
  4.    Nachfolgend werden in dieser Datei die neuen Funktionen aufgeführt, die 
  5.    NVDI für Bildschirmausgaben anbietet.
  6.  
  7. 1. Off-Screen Bitmaps
  8. =====================
  9.  
  10.    Für viele Anwendungen ist es sehr nützlich, wenn Zeichenfunktionen nicht 
  11.    direkt auf den Bildschirm, sondern auf einen nicht sichtbaren Bildschirm 
  12.    angewendet werden können. Einen derartigen "versteckten" Bildschirm 
  13.    nennt man Off-Screen-Bitmap.
  14.    Zur Erzeugung von Off-Screen-Bitmaps dient die Funktion OPEN BITMAP.
  15.    Man kann ihr entweder die Größe eines Bitmap angeben, die Sie allozieren 
  16.    soll, oder ihr eine Bitmap übergeben. Die Bitmap wird im gleichen Format 
  17.    wie die des Bildschirms verwaltet, wodurch schnelles Kopieren zwischen 
  18.    beiden möglich ist.
  19.    Die Funktion CLOSE BITMAP schließt eine mit OPEN BITMAP erzeugte Bitmap 
  20.    und  gibt gegebenenfalls deren Speicher zurück.
  21.  
  22.  
  23.       OPEN BITMAP (VDI 100, 1)
  24.  
  25.       void  v_opnbm( WORD *work_in, MFDB *bitmap, WORD *handle, WORD *work_out )
  26.       {
  27.          pb[1] = work_in;
  28.          pb[3] = work_out;
  29.          pb[4] = work_out + 45;
  30.  
  31.          contrl[0] = 100;
  32.          contrl[1] = 0;
  33.          contrl[3] = 20;
  34.          contrl[5] = 1;
  35.          *(MFDB *)&contrl[7] = bitmap;
  36.  
  37.          vdi();
  38.  
  39.          *handle = contrl[6];
  40.          pb[1] = intin;
  41.          pb[3] = intout;
  42.          pb[4] = ptsout;
  43.       }
  44.  
  45.       Bestückung der VDI-Arrays:
  46.  
  47.        Feldelement      | Belegung
  48.       ------------------|-------------------------------------------
  49.       contrl[0]         | 100    Funktionsnummer für v_opnbm()
  50.       contrl[1]         | 0      Anzahl der Einträge in ptsin
  51.       contrl[2]         | 6      Anzahl der Einträge in ptsout
  52.       contrl[3]         | 20     Anzahl der Einträge in intin
  53.       contrl[4]         | 45     Anzahl der Einträge in intout
  54.       contrl[5]         | 1      Unterfunktionsnummer für v_opnbm()
  55.       contrl[6]         | handle
  56.       contrl[7..8]      | bitmap Zeiger auf einen MFDB der Bitmap
  57.                         |
  58.       intin[0..19]      | work_in[0..19]
  59.                         |
  60.       intout[0..44]     | work_out[0..44]
  61.                         |
  62.       ptsout[0..11]     | work_out[45..56]
  63.  
  64.  
  65.       handle:           graf_handle()
  66.  
  67.       work_in[0..10]:   wie bei v_opnwk()/v_opnvwk() definiert
  68.       work_in[0]:       Getrez() + 2
  69.       work_in[11]:      Breite -1 (z.B. 1279)
  70.       work_in[12]:      Höhe -1 (z.B. 959)
  71.       work_in[13]:      Breite eines Pixels in Mikrometern
  72.       work_in[14]:      Höhe eines Pixels in Mikrometern
  73.       work_in[15..19]:  reserviert, sollte 0 enthalten
  74.  
  75.       Achtung: Der Eintrag work_in[11] sollte bei Addition von 1 ohne Rest 
  76.                durch 16 teilbar sein. Andernfalls rundet der VDI-Treiber 
  77.                auf den nächsthöheren ohne Rest teilbaren Wert.
  78.  
  79.       Hinweis: Wird für Pixelbreite und -Höhe 0 angegeben, so werden die 
  80.                Werte des Bildschirms benutzt.
  81.  
  82.       work_out[0..1]:   wie bei v_opnwk()/v_opnvwk() definiert
  83.       work_out[2]:      0
  84.       work_out[3..38]:  wie bei v_opnwk()/v_opnvwk() definiert
  85.       work_out[39]      0 (keine Hardware-Palette vorhanden, da Bitmap)
  86.       work_out[39..56]: wie beiv_opnwk()/v_opnvwk() definiert
  87.  
  88.       bitmap:           Zeiger auf einen MFDB
  89.  
  90.       Falls bitmap->fd_addr gleich NULL ist, so wird anhand der Größen- 
  91.       angaben in work_in Speicher für die Bitmap angefordert (die Bitmap 
  92.       wird im Gegensatz zu v_opnvwk() gelöscht).
  93.  
  94.       Um eine Bitmap im gerätespezifischen Format zu öffnen, muß 
  95.       bitmap->fd_nplanes eine Null oder die Ebenenanzahl des Schirms 
  96.       enthalten (work_out[4] bei vq_extnd()). Ist bitmap->fd_nplanes 1, 
  97.       wird eine monochrome Bitmap angelegt.
  98.  
  99.       Die Einträge des MFDB (fd_addr, fd_w, fd_h, fd_wdwidth, fd_stand, 
  100.       fd_nplanes) werden vom VDI-Treiber gesetzt und an die aufrufende 
  101.       Applikation zurückgegeben. Wenn nicht nicht genügend Speicher 
  102.       vorhanden ist, wird der Inhalt des MFDBs nicht verändert; ein 
  103.       Null-Handle wird zurückgegeben.
  104.  
  105.       Wenn bitmap->fd_addr ungleich NULL ist, wird dieser Eintrag als 
  106.       Zeiger auf eine Bitmap interpretiert. Wenn die Bitmap im 
  107.       Standardformat vorliegt, wird sie ins gerätespezifische Format 
  108.       umgewandelt. Liegt sie schon im gerätespezifischen Format vor, so 
  109.       wird sie nicht umgewandelt. Falls die Auflösung der Bitmap (d.h.  
  110.       die Anzahl der Farben und Planes) nicht unterstützt wird, gibt 
  111.       v_opnbm() ein Null-Handle zurück.
  112.  
  113.  
  114.       CLOSE BITMAP (VDI 101, 1)
  115.  
  116.       void  v_clsbm( WORD handle )
  117.       {
  118.          contrl[0] = 101;
  119.          contrl[1] = 0;
  120.          contrl[3] = 0;
  121.          contrl[5] = 1;
  122.          contrl[6] = handle;
  123.          vdi();
  124.       }
  125.  
  126.       Bestückung der VDI-Arrays:
  127.  
  128.        Feldelement      | Belegung
  129.       ------------------|-------------------------------------------
  130.       contrl[0]         | 101    Funktionsnummer für v_clsbm()
  131.       contrl[1]         | 0      Anzahl der Einträge in ptsin
  132.       contrl[2]         | 0      Anzahl der Einträge in ptsout
  133.       contrl[3]         | 0      Anzahl der Einträge in intin
  134.       contrl[4]         | 0      Anzahl der Einträge in intout
  135.       contrl[5]         | 1      Unterfunktionsnummer für v_clsbm()
  136.       contrl[6]         | handle
  137.  
  138.       Die Funktion v_clsbm() schließt die mit handle bezeichnete Bitmap. 
  139.       Wenn der Speicher beim v_opnbm() vom VDI alloziert wurde, gibt sie 
  140.       diesen Speicher wieder frei.
  141.  
  142.  
  143.    Rasteroperationen bei Off-Screen-Bitmaps:
  144.    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  145.    Rasteroperationen zwischen Bildschirm und Off-Screen-Bitmap sollten 
  146.    grundsätzlich im gerätespezifischen Format erfolgen.
  147.    Wenn als Ziel einer Rasteroperation eine Off-Screen-Bitmap mit ihrem 
  148.    MFDB angegeben wird und wenn das zu dieser Bitmap gehörende Handle 
  149.    benutzt wird, so wird beim Blitten anhand der über vs_clip() auf dieser 
  150.    Workstation eingestellten Koordinaten geclippt. Für das Kopieren eines 
  151.    Rasters vom Bildschirm in eine Off-Screen-Bitmap sollte man also das 
  152.    VDI-Handle dieser Bitmap benutzen.
  153.    Ist die Bitmap dagegen Quelle und der Bildschirm Ziel, so sollte man das 
  154.    Handle der Bildschirm-Workstaion benutzen, da dann das Raster anhand der 
  155.    Bildschirm-Koordinaten abgeclippt wird.
  156.    Wenn man das von v_opnbm() zurückgelieferte Handle einer Bitmap benutzt 
  157.    und in fd_addr in einem MFDB 0 enthält, so werden die Daten der Bitmap 
  158.    statt dessen benutzt.
  159.  
  160.    ESCAPES
  161.    -------
  162.    Die VDI-Escape-Funktionen (VT52) können nicht auf einer Bitmap benutzt 
  163.    werden. Ihr Aufruf wid ignoriert.
  164.    
  165.    vs_color()/vq_color()
  166.    ---------------------
  167.    Wenn die Funktion vs_color() mit dem Handle einer Off-Screen-Bitmap 
  168.    aufgerufen wird, werden die Farben nur dann gesetzt, wenn es sich um 
  169.    High- oder True-Color handelt. Vq_color() ist ebenfalls nur in High- 
  170.    oder True-Color sinnvoll - andernfalls ist der Parameter valid -1.
  171.  
  172.    vst_point()
  173.    -----------
  174.    Die Funktion vst_point() und alle anderen Funktionen, die Texthöhen in 
  175.    Punkten einstellen, reagieren bisher nur dann sinnvoll, wenn die Bitmap 
  176.    die Ausmaβe des Bildschirms hat. 
  177.  
  178.    v_show_c()/v_hide_c()
  179.    ---------------------
  180.    Beide Funktionen werden ignoriert, falls sie mit dem Handle einer 
  181.    Off-Screen-Bitmap aufgerufen werden. Sie beziehen sich nur auf den 
  182.    Bildschirm und sollten nur vom AES aufgerufen werden.
  183.    
  184. 2. vq_scrninfo()
  185. =================
  186.  
  187.    Genauere Angaben über das Bildschirmformat liefert die Funktion INQUIRE 
  188.    SCREEN INFORMATION implementiert. Im workout-Array wird angeben, wie das 
  189.    gerätespezifische Format aufgebaut ist. 
  190.    Diese Informationen sind in erster Linie interessant für Programme, die
  191.    -  schnell Raster aufbauen (auch in TrueColor) und diese mit vro_cpyfm() 
  192.       auf den Schirm kopieren möchten.
  193.    -  Raster speichern (z.B. XIMGs).
  194.    -  Raster anzeigen.
  195.    
  196.       VQ_SCRNINFO( 102, 1 )
  197.  
  198.       void  vq_scrninfo( WORD handle, WORD *work_out )
  199.       {
  200.          pb[3] = work_out;
  201.  
  202.          intin[0] = 2;
  203.          contrl[0] = 102;
  204.          contrl[1] = 0;
  205.          contrl[3] = 1;
  206.          contrl[5] = 1;
  207.          contrl[6] = handle;
  208.          
  209.          vdi();
  210.  
  211.          pb[3] = intout;
  212.       }
  213.  
  214.       Bestückung der VDI-Arrays:
  215.  
  216.        Feldelement      | Belegung
  217.       ------------------|-------------------------------------------
  218.       contrl[0]         | 102    Funktionsnummer von vq_scrninfo()
  219.       contrl[1]         | 0      Anzahl der Einträge in ptsin
  220.       contrl[2]         | 0      Anzahl der Einträge in ptsout
  221.       contrl[3]         | 1      Anzahl der Einträge in intin
  222.       contrl[4]         | 272    Anzahl der Einträge in intout
  223.       contrl[5]         | 1      Unterfunktionsnummer von vq_scrninfo()
  224.       contrl[6]         | handle
  225.                         |
  226.       intin[0]          | 2      erweiterte Informationen ausgeben
  227.                         |
  228.       intout[0..272]    | work_out[0..272]
  229.       
  230.  
  231.       intout[0]:  Formatangabe:
  232.                   0: Interleaved Planes, wortweise (ATARI Grafik)
  233.                   1: Standardformat (komplette Planes)
  234.                   2: Packed Pixels
  235.                  -1: unbekanntes Format; nicht direkt beschreibbar
  236.       intout[1]:  Verfügbarkeit einer CLUT:
  237.                   0: keine CLUT (z.B. TTM 194)
  238.                   1: Hardware-CLUT
  239.                   2: Software-CLUT (HiColor oder TrueColor)
  240.       intout[2]:  Anzahl der Ebenen (Bits) pro Pixel
  241.       intout[3/4]:Farbanzahl oder 0L (mehr als 2*10^31 Farben)
  242.       intout[8]:  Anzahl der Bits für die Rot-Intensität
  243.       intout[9]:  Anzahl der Bits für die Grün-Intensität
  244.       intout[10]: Anzahl der Bits für die Blau-Intensität
  245.       intout[11]: Anzahl der Bits für den Alpha-Channel oder ähnliches
  246.       intout[12]: Anzahl der Bits für Genlock
  247.       intout[13]: Anzahl der nicht benutzen Bits
  248.  
  249.       Falls eine Hardware-CLUT (intout[1] == 1) vorhanden ist:
  250.       intout[16-271]: Pixelwert des zugehörigen VDI-Farbindexes
  251.  
  252.       Falls HiColor, TrueColor oder ähnliches vorhanden ist:
  253.       intout[16..31]: Zuordnung von Bitnummer im Pixel zum Bit der Rotintensität
  254.       intout[32..47]: Zuordnung von Bitnummer im Pixel zum Bit der Grünintens.
  255.       intout[48..63]: Zuordnung von Bitnummer im Pixel zum Bit der Blauintensität
  256.       intout[64..79]: Zuordnung der Bitnummer für Alpha-Channel
  257.       intout[80..95]: Zuordnung der Bitnummer für Genlock
  258.       intout[96..127]: unbenutzte Bits
  259.       intout[128..271]: reserviert (0)
  260.       
  261.    Beispiele:
  262.    ----------
  263.  
  264.       In 256 Farben auf dem Falcon würden folgende Ausgaben erfolgen:
  265.  
  266.       intout   | Wert   | Bedeutung
  267.       ---------|--------|-----------------------------------------------------
  268.          0     |   0    | Interleaved Planes, wortweise
  269.          1     |   1    | Hardware-CLUT vorhanden
  270.          2     |   8    | 8 Bit pro Pixel
  271.          3/4   | 256    | 256 verschiedene Farben gleichzeitig möglich
  272.          8     |   6    | 6 Bits für die Rot-Intensität
  273.          9     |   6    | 6 Bits für die Grün-Intensität
  274.         10     |   6    | 6 Bits für die Blau-Intensität
  275.         11     |   0    | kein Bit für Alpha-Channel
  276.         12     |   0    | kein Bit für Genlock
  277.         13     |   0    | kein unbenutzes Bit
  278.                |        |
  279.                |        |
  280.         16     |   0    | Pixelwert für VDI-Farbindex 0
  281.         17     | 255    | Pixelwert für VDI-Farbindex 1
  282.         18     |   2    | Pixelwert für VDI-Farbindex 2
  283.         ...    | ...    |
  284.        271     |  15    | Pixelwert für VDI-Farbindex 255
  285.  
  286.       In HiColor auf dem Falcon würden folgende Ausgaben erfolgen:
  287.  
  288.       intout   | Wert   | Bedeutung
  289.       ---------|--------|-----------------------------------------------------
  290.          0     |   2    | Packed Pixels
  291.          1     |   2    | HiColor bzw. TrueColor
  292.          2     |  16    | 16 Bit pro Pixel
  293.          3/4   | 32768  | 32768 verschiedene Farben gleichzeitig möglich
  294.          8     |   5    | 5 Bits für die Rot-Intensität
  295.          9     |   5    | 5 Bits für die Grün-Intensität
  296.         10     |   5    | 5 Bits für die Blau-Intensität
  297.         11     |   0    | kein Bit für Alpha-Channel
  298.         12     |   1    | ein Bit für Genlock
  299.         13     |   0    | kein unbenutzes Bit
  300.                |        |
  301.                |        |
  302.         16     |  11    | Bit 0 der Rot-Intensität (niederwertigstes Bit)
  303.                |        | befindet sich in Bit 11 des Pixels
  304.         17     |  12    | Bit 1 befindet sich in Bit 12 des Pixels
  305.         18     |  13    | ...
  306.         19     |  14    | ...
  307.         20     |  15    | Bit 4 der Rot-Intensität (höchstwertigstes Bit)
  308.                |        | befindet sich in Bit 15 des Pixels
  309.         21..31 |  -1    | Bits werden nicht für Rot-Intensität benutzt
  310.                |        |
  311.                |        |
  312.         32     |   6    | Bit 0 der Grün-Intensität (niederwertigstes Bit)
  313.                |        | befindet sich in Bit 6 des Pixels
  314.         33     |   7    | Bit 1 befindet sich in Bit 7 des Pixels
  315.         34     |   8    | ...
  316.         35     |   9    | ...
  317.         36     |  10    | Bit 4 der Grün-Intensität (höchstwertigstes Bit)
  318.                |        | befindet sich in Bit 10 des Pixels
  319.         37..37 |  -1    | Bits werden nicht für Grün-Intensität benutzt
  320.                |        |
  321.                |        |
  322.         48     |   0    | Bit 0 der Blau-Intensität (niederwertigstes Bit)
  323.                |        | befindet sich in Bit 0 des Pixels
  324.         49     |   1    | Bit 1 befindet sich in Bit 1 des Pixels
  325.         50     |   2    | ...
  326.         51     |   3    | ...
  327.         52     |   4    | Bit 4 der Blau-Intensität (höchstwertigstes Bit)
  328.                |        | befindet sich in Bit 4 des Pixels
  329.         53..63 |  -1    | Bits werden nicht für Blau-Intensität benutzt
  330.                |        |
  331.                |        |
  332.         64..79 |  -1    | kein Alpha-Channel
  333.                |        |
  334.                |        |
  335.         80     |   5    | Bit für Genlock
  336.         81..95 |  -1    | nicht für Genlock benutzt
  337.                |        |
  338.                |        |
  339.         96..127|  -1    | keine unbenutzten Bits
  340.                |        |
  341.                |        |
  342.  
  343. 3. Wie erkennt man, ob die neuen Funktionen vorhanden sind?
  344. ===========================================================
  345.  
  346.    NVDI installiert (ebenso wie der nur fürs ATARI-VDI gedachte Enhancer) 
  347.    einen Cookie mit der Kennung 'EdDI'. Das auf diese Kennung folgende  
  348.    Langwort ist die Adresse eines Funktionsdispatchers, der mit der 
  349.    Funktionsnummer in Register d0 aufgerufen wird. Der Aufruf erfolgt nach 
  350.    den Pure C-Konventionen (Register d0-d2/a0-a1 und der Stack werden zur 
  351.    Parameterübergabe benutzt). 
  352.  
  353.    Bisher existiert nur die Funktion 0, die als Funktionsresultat eine 
  354.    Versionsnummer zurückliefert, anhand er man auf die unterstützten 
  355.    Funktionen schlieβen kann. 
  356.  
  357.    Ab Version 1.00 ($100 wird zurückgeliefert) sind die Funktionen 
  358.    v_opnbm(), v_clsbm() und vq_scrninfo() vorhanden. 
  359.  
  360.